/******************************************************************************
 * 文件名称: uds_port.c
 * 内容摘要: UDS 协议栈移植接口
 * 创建者の: 孔佳伟
 * 个人主页: https://gitee.com/thin-wind/jump
 * 修改记录:
 ******************************************************************************/

#include "uds_port.h"

#include "string.h"
#include "uds_service.h"
#include "uds_tp.h"

uint16_t REQUEST_ID  = 0x0;   // 请求 ID
uint16_t FUNCTION_ID = 0x7DF; // 功能 ID
uint16_t RESPONSE_ID = 0x0;   // 应答 ID

/******************************************************************************
* 函数名称: void uds_recv_frame(uint32_t id, uint8_t* frame_buf, uint8_t frame_dlc)
* 功能说明: 接收到一帧报文
* 输入参数: uint32_t    id              --消息帧 ID
    　　　　uint8_t*    frame_buf       --接收报文帧数据首地址
    　　　　uint8_t     frame_dlc       --接收报文帧数据长度
* 输出参数: 无
* 函数返回: 无
* 其它说明: frame_dlc 长度必须等于 FRAME_SIZE，否则会被判断为无效帧
******************************************************************************/
void uds_recv_frame(uint32_t id, uint8_t *frame_buf, uint8_t frame_dlc)
{
    if (REQUEST_ID == id)
        uds_tp_recv_frame(0, frame_buf, frame_dlc);
    else if (FUNCTION_ID == id)
        uds_tp_recv_frame(1, frame_buf, frame_dlc);
    else
        ; // do nothing
}

/******************************************************************************
* 函数名称: void uds_send_frame(uint32_t id, uint8_t* frame_buf, uint8_t frame_dlc)
* 功能说明: 发送一帧报文
* 输入参数: uint8_t     response_id     --应答 ID
    　　　　uint8_t*    frame_buf       --发送报文帧数据首地址
    　　　　uint8_t     frame_dlc       --发送报文帧数据长度
* 输出参数: 无
* 函数返回: 无
* 其它说明: frame_dlc 长度应当等于 FRAME_SIZE
******************************************************************************/
uint8_t LIN_respon_data[8];

void uds_send_frame(uint32_t response_id, uint8_t *frame_buf, uint8_t frame_dlc)
{
    (void)(response_id);
    (void)(frame_buf);
    (void)(frame_dlc);

    Msg_S msg = { 0 };

    msg.id      = response_id;
    msg.data[0] = response_id;
    memcpy(&msg.data[0], frame_buf, (frame_dlc > FRAME_SIZE) ? FRAME_SIZE : frame_dlc);

    PutToTxBuf(&msg);
}

/******************************************************************************
 * 函数名称: void uds_init(void)
 * 功能说明: UDS 初始化
 * 输入参数: 无
 * 输出参数: 无
 * 函数返回: 无
 * 其它说明: 无
 ******************************************************************************/
void uds_init(void)
{
    Dev_DataInit();
    queue_init();
    service_init();
}

/******************************************************************************
 * 函数名称: void uds_1ms_task(void)
 * 功能说明: UDS 周期任务
 * 输入参数: 无
 * 输出参数: 无
 * 函数返回: 无
 * 其它说明: 该函数需要被 1ms 周期调用
 ******************************************************************************/
void uds_1ms_task(void)
{
    network_task();
    service_task();
}
